package main

import (
	"fmt"
	"strings"
)

type talker interface {
	talk() string
}

func shout(t talker) {
	louder := strings.ToUpper(t.talk())
	fmt.Println(louder)
}

type laser int

// 指针接收者
func (la *laser) talk() string {
	return strings.Repeat("pew ", int(*la))
}

// 指针和接口
func main() {
	// 注意 laser 类型并没有满足 talker 接口。只是 laser 类型的指针满足了
	// 声明一个 laser 类型的变量 pew，同时 pew 的指针是 talker 接口的实现者
	pew := laser(2)

	// 所以 pew 的指针 &pew 可以作为入参传入 shout 方法
	shout(&pew)
}
